ヘッダーをスキップ
Oracle TimesTen Cache Connect to Oracle開発者および管理者ガイド
リリース7.0
E05172-01
  目次へ
目次
索引へ
索引

前へ
前へ
次へ
次へ
 

READONLY、AUTOREFRESHおよびAWTキャッシュ・グループのOracleオブジェクトの管理

READONLYキャッシュ・グループおよびカスタマイズされた一部のUSERMANAGEDキャッシュ・グループは、AUTOREFRESH機能を使用してOracle更新をTimesTenキャッシュに自動的に伝播します。

キャッシュ・グループには、完全自動リフレッシュまたは増分自動リフレッシュのいずれかを設定できます(「AUTOREFRESHキャッシュ・グループ属性」を参照)。増分自動リフレッシュ用に設定した場合、TimesTenでは、キャッシュ・グループで指定された各Oracle実表に対して、トリガー、ログ表などのオブジェクトを作成する必要があります。トリガーは、Oracle実表で挿入、更新および削除処理を行うたびに起動されます。また、更新されたレコードの主キーをログ表に記録します。TimesTenキャッシュ・エージェントは、定期的にログ表で更新キーを検索し、更新されたOracle実表を結合して最新の更新のスナップショットを取得します。

自動リフレッシュに必要なOracleオブジェクトは、AUTOREFRESH INCREMENTALを使用するキャッシュ・グループの作成時にTimesTenによって自動的にインストールされます(「Oracleオブジェクトの自動インストール」を参照)。Oracleオブジェクトをインストールする前に、次のタスクを実行する必要があります。

また、Oracleオブジェクトを手動でインストールして、限定されたOracle権限を持つユーザーがトリガーを使用するキャッシュ・グループを作成できるようにすることもできます(「Oracleオブジェクトの手動インストール」を参照)。

TimesTenは、各キャッシュ管理ユーザーに対して次の表を作成します。ここで、versionは、TimesTenの内部バージョン番号です。

TT_version_USER_COUNT
TT_version_AGENT_STATUS
TT_version_SYNC_OBJS

TimesTenは、キャッシュ・グループの各表に対して次のオブジェクトを作成します。ここで、numberは元のOracle表のオブジェクトID、versionはTimesTenの内部バージョン番号です。

TT_version_number_L
Oracle表に対して行われた変更を記録するための変更ログ表。
TT_version_number_T
変更ログ表に変更を記録するためのトリガー。トリガーは、キャッシュされた表で挿入、削除、更新が行われると起動されます。

AWTキャッシュ・グループにもOracleオブジェクトが必要です。Oracleでは、状態およびOracleに最後に適用された文を追跡するために、状態表が作成されます。この表は、CREATE ASYNCHRONOUS WRITETHROUGH CACHE GROUP文によって自動的に作成されます。また、Oracle表は、AWTキャッシュ・グループが作成される前に手動で作成することもできます。「AWTキャッシュ・グループ用のOracleオブジェクトの手動インストール」を参照してください。

TimesTenは、次の表のユーザーPUBLICに対してSELECT、INSERT、UPDATEおよびDELETE権限を付与します。

この項の後半では、次の内容について説明します。

Oracleオブジェクトの自動インストール

TimesTenで、Oracleオブジェクトを自動的にインストールするようにするには、Oracleオブジェクトの自動作成に必要なすべての権限がキャッシュ管理ユーザーに付与されていることを確認します。「Oracleユーザーの作成および権限の設定」を参照してください。Oracleオブジェクトは、PAUSEDまたはONの状態でキャッシュ・グループが作成されるか、またはキャッシュ・グループの状態がPAUSEDまたはONに変更されると、自動的に作成されます。

例3.29に、TimesTenで、READONLYキャッシュ・グループ用のOracleオブジェクトを自動的にインストールする方法を示します。

  1. ttIsqlを使用してcgDSNデータ・ストアに接続します。
  2. ttCacheUidPwdSetプロシージャをコールして、キャッシュ管理ユーザーID(testuser)およびパスワード(mypsswrd)を設定します。
  3. ttCacheStartプロシージャをコールしてキャッシュ・エージェントを起動します。
  4. CREATE READONLY CACHE GROUPを使用してREADONLYキャッシュ・グループを作成します。このキャッシュ・グループでは、AUTOREFRESH INCREMENTALおよびSTATEがデフォルトでPAUSEDに設定されています。
例3.29

> ttIsql cgDSN

Command> call ttCacheUidPwdSet('testuser','mypsswrd');

Command> call ttCacheStart();

Command> CREATE READONLY CACHE GROUP readcache

         FROM

         user1.readtab

         (a NUMBER NOT NULL PRIMARY KEY, b VARCHAR2(31));

例3.30に、TimesTenで、AWTキャッシュ・グループ用のOracleオブジェクトを自動的にインストールする方法を示します。

例3.30

> ttIsql cgDSN

Command> call ttCacheUidPwdSet('testuser','mypsswrd');

Command> call ttCacheStart();

Command> CREATE ASYNCHRONOUS WRITETHROUGH CACHE GROUP writecache

         FROM user1.writetab (a NUMBER NOT NULL PRIMARY KEY,

                              b VARCHAR2(31));

Oracleオブジェクトの手動インストール

Oracleオブジェクトの自動インストールに必要なすべてのCREATE権限をユーザーに付与しない場合は、Oracleオブジェクトを手動でインストールし、AUTOREFRESH INCREMENTALを使用するキャッシュ・グループおよびAWTキャッシュ・グループを限定された権限を持つユーザーが作成できるようにします。詳細は、「AWTキャッシュ・グループ用のOracleオブジェクトの手動インストール」を参照してください。

手動でインストールされたOracleオブジェクトを使用するために必要な権限は、「Oracleユーザーの作成および権限の設定」に示されています。ただし、オブジェクトのインストーラに、自動インストール・オプションを選択したユーザーと同じOracle権限が付与されている必要があります。

Oracleオブジェクトの作成に必要なSQLコードは、TimesTenから取得する必要があります。

SQLコードを取得した後、Oracleのホスト・マシン上でSQL*Plusを起動してログインすることによって、Oracleオブジェクトを手動で作成できます。

sqlplus cacheUid/cachePwd@machine_name

キャッシュ・エージェント・ユーザーがOracleにオブジェクトを作成するために必要なOracle拡張権限の詳細は、「Oracleユーザーの作成および権限の設定」を参照してください。

SQL>プロンプトで、SQLコードを入力してオブジェクトを作成できます。

例3.31

ttIsqlを使用してデータ・ストアに接続した後で、ttCacheStartプロシージャをコールしてデータ・ストアのキャッシュ・エージェントを起動します。キャッシュ管理ユーザーIDはtestuser、パスワードはmypsswrdです。次に、CREATE CACHE GROUPを使用してAUTOREFRESH STATEがOFFに設定されたREADONLYキャッシュ・グループを作成し、cachesqlgetコマンドを実行してOracleオブジェクトのインストールに必要なSQLを取得します。

> ttIsql cgDSN

Command> call ttCacheUidPwdSet('testuser', 'mypsswrd');

Command> call ttCacheStart();

Command> CREATE READONLY CACHE GROUP readcache

  AUTOREFRESH

       MODE INCREMENTAL

       INTERVAL 30 SECONDS

       STATE OFF

  FROM USER1.READTAB

    (A NUMBER NOT NULL PRIMARY KEY, B VARCHAR2(31));

Command> cachesqlget readcache install;

cachesqlgetからの出力は次のようになります。

CREATE TABLE system.tt_version_user_count(tableName VARCHAR2(65), userCount

.... more code .....

END;

.

RUN;

SQLは、TimesTenからOracle上のSQL*Plusプロンプトに簡単に切り取って貼り付けることができます。

SQL> CREATE TABLE system.tt_version_user_count(tableName VARCHAR2(65), userCount

.... more code .....

END;

.

RUN;

また、ttIsqlでコマンドラインに出力ファイル名を指定して、cachesqlget出力をファイルに保存することもできます。その後、そのファイルをOracleシステムにコピーしてOracleシステムで実行すると、Oracleオブジェクトをインストールできます。

キャッシュをロードすると、AUTOREFRESH STATEはPAUSEDからONに変更されます。次のようにCOMMIT EVERY n ROWS句を含めます。

Command> LOAD CACHE GROUP readcache

  COMMIT EVERY 1000 ROWS;


注意: Oracleオブジェクトを手動でインストールした場合は、手動で削除する必要があります。詳細は、「Oracleオブジェクトの削除」を参照してください。

AWTキャッシュ・グループ用のOracleオブジェクトの手動インストール

AWTキャッシュ・グループ用のOracleオブジェクトを手動でインストールする場合は、Oracleインスタンス用のAWTキャッシュ・グループを作成する前にインストールしておく必要があります。Oracleインスタンスおよびキャッシュ管理ユーザーIDとパスワードそれぞれに対してオブジェクトを一度のみインストールする必要があります。

Oracleオブジェクトをインストールするには、次の手順を実行します。

  1. ttIsqlセッション内でttCacheUidGetプロシージャを使用して、キャッシュ管理ユーザーIDおよびパスワードがすでに設定されているかどうかを確認します。次の例では、DSNはcgDSNです。NULL結果は、cgDSNに設定されているキャッシュ管理ユーザーIDまたはパスワードが存在しないことを示します。
  2. > ttIsql cgDSN

    Command> call ttCacheUidGet();

    < <NULL> >

    1 row found.

  3. ttCacheUidPwdSet(uid,pwd)を使用してキャッシュ管理ユーザーIDおよびパスワードを設定します。次の例では、ttIsqlセッション内からキャッシュ管理ユーザーIDをtestuser、パスワードをmypsswrdに設定した後、そのように設定されたことを確認しています。
  4. Command> call ttCacheUidPwdSet('testuser','mypsswrd');

    Command> call ttCacheUidGet();

    < testuser >

  5. ASYNCHRONOUS_WRITETHROUGHおよびINSTALLフラグを指定してttIsql cachesqlgetコマンドを使用することによって、オブジェクトをインストールするSQLを取得します。
  6. Command> cachesqlget ASYNCHRONOUS_WRITETHROUGH INSTALL

    出力は次のようになります。

    CREATE TABLE testuser.TT_02_RepPeers(

      replication_name VARCHAR2(31) NOT NULL,

      replication_owner VARCHAR2(31) NOT NULL,

      tt_store_id NUMBER NOT NULL,

      subscriber_id NUMBER NOT NULL,

      commit_timestamp NUMBER,

      commit_seqnum NUMBER,

      timerecv NUMBER,

      protocol NUMBER,

      PRIMARY KEY(tt_store_id));

    GRANT INSERT, UPDATE, DELETE, SELECT ON testuser.TT_02_RepPeers TO PUBLIC;

  7. SQL*PlusセッションにSQLコードを切り取って貼り付けて、オブジェクトを作成できます。また、PassThrough属性を3に設定してTimesTen接続上のODBCまたはJDBCプログラムからコードを実行できます。

  8. 注意: Oracleオブジェクトを手動でインストールした場合は、手動で削除する必要があります。詳細は、「AWTキャッシュ・グループ用のOracleオブジェクトの手動削除」を参照してください。

Oracleオブジェクトのインストールの確認

オブジェクトがOracleにインストールされていることを確認するには、OracleアカウントにログインしてOracleのSQL *Plusコマンド・プロンプトから次の問合せを実行します。

SQL> select owner, object_name, object_type from all_objects where object_name like 'TT\___\_%' escape '\';

出力には、次のようなオブジェクトが含まれている必要があります。

OWNER                OBJECT_NAME              OBJECT_TYPE

------------- ------------------------------ ------------------

TESTUSER              TT_02_34520_L               TABLE

TESTUSER              TT_02_34520_T               TRIGGER

TESTUSER              TT_02_USER_COUNT            TABLE

TESTUSER              TT_02_REPPEERS              TABLE

Oracleオブジェクトの削除

OracleオブジェクトがCache Connect to Oracleによって自動的にインストールされた場合(「Oracleオブジェクトの自動インストール」を参照)は、AUTOREFRESHをOFFに設定するか、またはDROP CACHE GROUPを使用してキャッシュ・グループを削除すると、Oracleオブジェクトは自動的に削除されます。

Oracleオブジェクトを手動でインストールした場合(「Oracleオブジェクトの手動インストール」を参照)は、アンインストールするコードを実行することによって、Oracleシステムからオブジェクトを削除できます。TimesTenからuninstallコードを取得するには、次のように入力します。

AWTキャッシュ・グループ用のOracleオブジェクトの手動削除

Oracleインスタンスを使用するすべてのデータ・ストアからすべてのAWTキャッシュ・グループを削除した後で、AWTキャッシュ・グループ用のOracleオブジェクトを削除します。

  1. ttIsqlセッションからcachesqlgetコマンドを実行して、オブジェクトを削除するSQLを取得します。次の例では、DSNはcgDSN、ユーザーはtestuserです。
  2. > ttIsql -connStr "dsn=cgDSN'

    Command> cachesqlget ASYNCHRONOUS_WRITETHROUGH UNINSTALL

    出力は次のようになります。

    DROP TABLE testuser.TT_02_RepPeers;

  3. SQL*PlusセッションにSQLコードを切り取って貼り付けて、オブジェクトを削除します。また、PassThrough属性を3に設定してTimesTen接続上のODBCまたはJDBCプログラムからコードを実行できます。